// 1640. 能否连接形成数组
// 给你一个整数数组 arr， 数组中的每个整数 互不相同。 另有一个由整数数组构成的数组 pieces， 其中的整数也 互不相同。 请你以 任意顺序 连接 pieces 中的数组以形成 arr。 但是， 不允许 对每个数组 pieces[i] 中的整数重新排序。

// 如果可以连接 pieces 中的数组形成 arr， 返回 true； 否则， 返回 false。
/**
 * @param {number[]} arr
 * @param {number[][]} pieces
 * @return {boolean}
 */
var canFormArray = function (arr, pieces) {
  let n = arr.length,
    m = pieces.length
  let k = 0
  for (let i = 0; i < n; i++) {
    let k = 0
    for (let j = 0; j < pieces[k].length; j++) {
      if (arr[i] !== pieces[k][j]) {
        k++
        if (k >= m) {
          return false
        }
        j = -1
      } else {
        i = j + 1 < pieces[k].length ? i + 1 : i
      }
    }
  }

  return true
};

var canFormArray1 = function (arr, pieces) {
  let map = new Map()
  let n = arr.length
  for (const piece of pieces) {
    map.set(piece[0],piece)
  }
  let i = 0
  while(i<n){
    if(map.has(arr[i])){
      
      let p = map.get(arr[i])
      for (const item of p) {
        if(arr[i] === item){
          i++
        }else{
          return false
        }
      }
    }else{
      return false
    }
  }
  return true
};
var arr = [91, 4, 64, 78],
  pieces = [
    [78],
    [4, 64],
    [91]
  ]
console.log(canFormArray1(arr, pieces))
